package com.ygxsk.carhome.utils;

import android.graphics.Bitmap;
import android.text.TextUtils;

import com.blankj.utilcode.util.ColorUtils;
import com.blankj.utilcode.util.FileUtils;
import com.blankj.utilcode.util.ImageUtils;
import com.blankj.utilcode.util.PathUtils;
import com.blankj.utilcode.util.ScreenUtils;
import com.blankj.utilcode.util.ThreadUtils;
import com.ygxsk.carhome.R;
import com.ygxsk.carhome.constant.ConstantSign;
import com.ygxsk.carhome.imagepick.ImageBean;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileFilter;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedHashSet;

/**
 * Autuhor:Administrator
 * Time:2020/3/23 0023  14:30
 * Description: this is
 */
public class TaskPicUtils {

    /**
     * 添加水印的方法,这里需要添加图片的前缀，携带什么前缀 就是添加什么前缀
     */
    public static String methodAddTimestampWatermark(String imagePrefix, String _outfile) {//Watermark

        Bitmap bitmap = ImageUtils.getBitmap(_outfile);
        //LogUtils.d("itchen-----即将添加水印的-图片原始地址-->" + _outfile);
        //2021-8-26 10:33:21 添加的日志：
        //itchen-----即将添加水印的-图片原始地址-->/storage/emulated/0/Android/data/com.dgj.propertysmart/tiny/tiny-831-2021-08-26-10-31-07.jpg

        //第一个是仅仅添加 时间的水印。
        //String content = TimeUtilSer.getNow()+;
        //String content = TimeUtilSer.getNow() + "#" + DeviceUtils.getManufacturer();

        //添加一个分号 好确认 是android端的设备上传的时间。
        String content = TimeUtilSer.getNow() + ";";

        //获取图片的尺寸
        int[] imageSizeTwo = ImageUtils.getSize(_outfile);

        //LogUtils.d("itchen---图片的尺寸是：" + imageSizeTwo[0] + "--->" + imageSizeTwo[1]);

        //LogUtils.d("itchen---水印的位置是：" + (imageSizeTwo[0] / 3) + "--->" + (imageSizeTwo[1] - 150));
        //itchen---图片的尺寸是：960--->1280

        //LogUtils.d("itchen---getAppScreenWidth-->" + ScreenUtils.getAppScreenWidth());
        //LogUtils.d("itchen---getAppScreenHeight-->" + ScreenUtils.getAppScreenHeight());

        //===================================================================================

        /* *返回带有文本水印的位图。
         * @param src位图的来源。
         * @param content文本的内容。
         * @param textSize文本大小。
         * @param color文本的颜色。
         * @param x第一个像素的x坐标。
         * @param y第一个像素的y坐标。
         * @返回带有文本水印的位图*/

        //使用一个基本的字号 是46号字体
        int textSize = 32;
        //默认是三分之一屏幕
        int xpixel = imageSizeTwo[0] / 3;
        int ypixel = (imageSizeTwo[1]) - 100;

        if (ScreenUtils.getScreenWidth() <= 720) {

            //LogUtils.d("itchen---图片宽度是<= 720");

            textSize = 34;
            xpixel = imageSizeTwo[0] / 3;
            ypixel = (imageSizeTwo[1]) - 100;

        } else if ((720 < ScreenUtils.getScreenWidth()) && (ScreenUtils.getScreenWidth() <= 1080)) {

            //LogUtils.d("itchen---图片宽度是720 <xx<= 1080");

            //itchen---图片的尺寸是：960--->1280
            //李秀秀的 一加 A3000 屏幕分辨率 是：5.5英寸 1080x1920像素

            textSize = 36;
            xpixel = imageSizeTwo[0] / 3;
            ypixel = (imageSizeTwo[1]) - 100;

        } else if (ScreenUtils.getScreenWidth() > 1080) {

            //LogUtils.d("itchen---图片宽度是 > 1080");

            textSize = 36;
            xpixel = imageSizeTwo[0] / 3;
            ypixel = (imageSizeTwo[1]) - 150;

        }

        //===================================================================================

        //第一设计水印在图片中心位置靠右。
        /*Bitmap bitmapResult = ImageUtils.addTextWatermark(bitmap,//
                content,//
                textSize,//
                ColorUtils.getColor(R.color.buttonpress),//
                xpixel, //图片的宽度的二分之一
                ypixel  //图片的宽度减掉一部分
        );*/

        //第二设计水印在图片左侧就开始
        Bitmap bitmapResult = ImageUtils.addTextWatermark(bitmap,//
                content,//
                textSize,//
                ColorUtils.getColor(R.color.buttonpress),//
                60, //图片的宽度的二分之一
                ypixel  //图片的宽度减掉一部分
        );

        //String fileResult = PathUtils.getExternalAppFilesPath() + File.separator + imagePrefix + "wm" + TimeUtilSer.getNowPic() + ".jpg";
//        LogUtils.d("itchen------fileResult------添加前缀  水印  之后的图片路径---------->" + PathUtils.getExternalAppFilesPath() + File.separator + imagePrefix + "wm" + TimeUtilSer.getNowPic() + ".jpg");
        //Watermark缩写【wm】是我为了区分原始图片和加了水印之后的一个区分。
        //itchen------fileResult------添加前缀  水印  之后的图片路径---------->/storage/emulated/0/Android/data/com.dgj.propertysmart/files/inspecttaskwatermark2021_08_26_10_31_08_050.jpg

        //做一个保存的操作：这个保存是 添加水印之后的图片
        //File fileFinalResult = saveBitmapFile(bitmapResult, fileResult);
        //File fileFinalResult = saveBitmapFile(bitmapResult, PathUtils.getExternalAppFilesPath() + File.separator + imagePrefix + "wm" + TimeUtilSer.getNowPic() + ".jpg");

//        if (fileFinalResult != null) {
//
//            //那么删除 传入的 初始的 文件和路径
//            //FileUtils.delete(_outfile);
//            if (FileUtils.isFileExists(_outfile) && FileUtils.isFile(_outfile)) {
//
//                //2021-8-26 这里的图片在tiny之中，因为是压缩过的。
//                //LogUtils.d("itchen----->fileFinalResult 不是空，即将删除_outfile---->" + _outfile);
//                //itchen----->fileFinalResult 不是空，即将删除_outfile---->/storage/emulated/0/Android/data/com.dgj.propertysmart/tiny/tiny-831-2021-08-26-10-31-07.jpg
//
//                // : 2022-04-21 14:41 暂时不做删除，因为要保留一段时间图片，
//                //FileUtils.delete(_outfile);
//            }
//        }

        //这里要不要 RxJAVA  做一个先后的顺序内容。
        //ImageBean imageBean = new ImageBean(fileResult);

        //return fileResult;
        return saveBitmapFile(bitmapResult, PathUtils.getExternalAppFilesPath() + File.separator + imagePrefix + "wm" + TimeUtilSer.getNowPic() + ".jpg").getPath();
    }

    public static File saveBitmapFile(Bitmap bitmap, String filePath) {

        //LogUtils.d("itchen----添加水印-开始时间---->" + TimeUtils.getNowString());
        File file = new File(filePath);//将要保存图片的路径
        try {

            BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file));
            bitmap.compress(Bitmap.CompressFormat.JPEG, 100, bos);
            bos.flush();
            bos.close();
            //LogUtils.d("itchen----添加水印-结束时间---->" + TimeUtils.getNowString());
            return file;

        } catch (IOException e) {
            e.printStackTrace();
        }
//        finally {
////            LogUtils.d(ConstantApi.LOGCAT_NOMAL + file.getPath());
//        }

        return null;
    }

//    /*
//     * @Author:itchenqi
//     * @Time:2022-06-14  14:27
//     * @Description:维修师傅提交完毕之后，删除数据库之中 临时拷贝的一份；
//     */
//    public static void methodDeleteImageFileInGreenDaoCopy(WorkerOffLineInfoBean _workerOffLineInfoBean) {
//
//        if (_workerOffLineInfoBean != null) {
//
//            //-----------------------------------------------------------------------------------------------------------------
//            //删除维修前图片的拷贝；
//            if ((_workerOffLineInfoBean.getBeforeList() != null) && (!_workerOffLineInfoBean.getBeforeList().isEmpty())) {
//
//                for (String itemStringImagePathBefore ://
//                        _workerOffLineInfoBean.getBeforeList()) {//
//                    //2021-7-29 17:23:30 bug多次出现找不到图片的情况，因为这种删除对应前缀的有些笼统。
//                    if (FileUtils.isFileExists(itemStringImagePathBefore) && FileUtils.isFile(itemStringImagePathBefore)) {
//                        FileUtils.delete(itemStringImagePathBefore);
//                    }
//                }
//
//            }
//            //-----------------------------------------------------------------------------------------------------------------
//
//            //-----------------------------------------------------------------------------------------------------------------
//            //删除维修后图片的拷贝；
//            if ((_workerOffLineInfoBean.getAfterList() != null) && (!_workerOffLineInfoBean.getAfterList().isEmpty())) {
//
//                for (String itemStringImagePathAfter ://
//                        _workerOffLineInfoBean.getAfterList()) {//
//                    //2021-7-29 17:23:30 bug多次出现找不到图片的情况，因为这种删除对应前缀的有些笼统。
//                    if (FileUtils.isFileExists(itemStringImagePathAfter) && FileUtils.isFile(itemStringImagePathAfter)) {
//                        FileUtils.delete(itemStringImagePathAfter);
//                    }
//                }
//
//            }
//            //-----------------------------------------------------------------------------------------------------------------
//
//            //-----------------------------------------------------------------------------------------------------------------
//            //删除 维修人员签字 的拷贝；
//            if (!TextUtils.isEmpty(_workerOffLineInfoBean.getUserSignImg())) {
//
//                //2021-7-29 17:23:30 bug多次出现找不到图片的情况，因为这种删除对应前缀的有些笼统。
//                if (FileUtils.isFileExists(_workerOffLineInfoBean.getUserSignImg()) && FileUtils.isFile(_workerOffLineInfoBean.getUserSignImg())) {
//                    FileUtils.delete(_workerOffLineInfoBean.getUserSignImg());
//                }
//
//            }
//            //-----------------------------------------------------------------------------------------------------------------
//
//        }
//
//    }

    /**
     * 仅仅是删除，对应图片的对应路径下的图片
     */
    public static void methodDeleteImageFileInUpLoadList(ArrayList<ImageBean> _uploadImageList, String _imagePrefix) {

        //第一步 先删除本界面内存之中的的图片：
        //=============================================================================================================================================================
        if (_uploadImageList != null && !_uploadImageList.isEmpty()) {

            for (ImageBean imageBeanItem ://
                    _uploadImageList) {

                //LogUtils.d("itchen----->即将删除的上传的图片的位置是--->" + imageBeanItem.getImageShowPickerUrl());

                //真实的图片的名称为：
                String fileNameSure = imageBeanItem.getImageShowPickerUrl().substring(imageBeanItem.getImageShowPickerUrl().lastIndexOf("/") + 1);
                //LogUtils.d("itchen---->即将删除的具体的图片的信息名称----fileNameSure--->" + fileNameSure);
                //得到的是这种格式的路径。
                //itchen---->即将删除的具体的图片的信息名称----fileNameSure--->inspecttask2021_07_29_17_30_11_128.jpg

                //一并过滤是从相册选择过来之后压缩的图片，因为将来万一从相册选择 也是要过滤掉的  tiny 开头
                if (fileNameSure.startsWith(_imagePrefix)) {

                    //这里得是删除 原始图片。
                    //FileUtils.delete(imageBeanItem.getImageShowPickerUrl());

                    //2021-7-29 17:23:30 bug多次出现找不到图片的情况，因为这种删除对应前缀的有些笼统。
                    if (FileUtils.isFileExists(imageBeanItem.getImageShowPickerUrl()) && FileUtils.isFile(imageBeanItem.getImageShowPickerUrl())) {
                        FileUtils.delete(imageBeanItem.getImageShowPickerUrl());
                    }

                    //为了查看打印日志，测试放开，真实发包不要
                    //boolean curState = FileUtils.delete(imageBeanItem.getImageShowPickerUrl());
                            /*if (curState) {
                                //LogUtils.d("itchen---curState-->" + curState + "---->" + "巡检任务照片 已经删除成功。---路径==>" + imageBeanItem.getImageShowPickerUrl());
                            } else {
                                //LogUtils.d("itchen------>巡检任务 照片 没有被删除");
                            }*/

                } else {
                    //LogUtils.d("itchen------>巡检任务  照片 不是 STARTWITH_INSPECTTASK_FLAG  开头的。");
                }
            }

        }


        //第二步 删除
        //=============================================================================================================================================================
        //直接删除tiny文件夹下的 所有以为tiny 开头的
        //LogUtils.d("itchen---->外部应用 getExternalAppDataPath ==>" + PathUtils.getExternalAppDataPath());
        //itchen---->外部应用getExternalAppDataPath ==>/storage/emulated/0/Android/data/com.dgj.ordersystem
        //=============================================================================================================================================================

    }


    /**
     * 删除携带 指定前缀的 图片的文件，和压缩文件夹tiny之内的所有的图片。这个类似全部【此类型前缀】的都删掉了。
     */
    public static void methodDeleteImageFile_uploadList_files_tiny(ArrayList<ImageBean> _uploadImageList, String _imagePrefix) {

        //第一步 先删除本界面内存之中的的图片：
        //=============================================================================================================================================================
        if (_uploadImageList != null && !_uploadImageList.isEmpty()) {

            for (ImageBean imageBeanItem ://
                    _uploadImageList) {

                //LogUtils.d("itchen----->即将删除的上传的图片的位置是--->" + imageBeanItem.getImageShowPickerUrl());

                //真实的图片的名称为：
                String fileNameSure = imageBeanItem.getImageShowPickerUrl().substring(imageBeanItem.getImageShowPickerUrl().lastIndexOf("/") + 1);

                //一并过滤是从相册选择过来之后压缩的图片，因为将来万一从相册选择 也是要过滤掉的  tiny 开头
                if (fileNameSure.startsWith(_imagePrefix)) {

                    //FileUtils.delete(imageBeanItem.getImageShowPickerUrl());

                    if (FileUtils.isFileExists(imageBeanItem.getImageShowPickerUrl()) && FileUtils.isFile(imageBeanItem.getImageShowPickerUrl())) {
                        FileUtils.delete(imageBeanItem.getImageShowPickerUrl());
                    }

                } else {
                    //LogUtils.d("itchen------>保养任务  照片 不是 STARTWITH_EQUIPMENTTASK_FLAG  开头的。");
                }

            }
        }

        //=============================================================================================================================================================
        //第三步删除 files文件夹下 所有携带他们自己的前缀的图片，因为例如 拍照的时候 拍照图片也是没有删干净的，其他的
        FileUtils.deleteFilesInDirWithFilter(PathUtils.getExternalAppFilesPath(), new FileFilter() {

            @Override
            public boolean accept(File pathname) {
                //LogUtils.d("itchen---Android/data/com.dgj.propertysmart/files/文件夹下--->pathname-->" + pathname.getAbsolutePath());
                return pathname.isFile() && pathname.getName().startsWith(_imagePrefix);
            }
        });

        //第二步 删除 tiny文件夹下的 tiny开头的图片 文件
        //=============================================================================================================================================================

        FileUtils.deleteFilesInDirWithFilter(PathUtils.getExternalAppDataPath() + File.separator + "tiny", new FileFilter() {

            @Override
            public boolean accept(File pathname) {
                //LogUtils.d("itchen---所有被压缩--->pathname-->" + pathname.getAbsolutePath());
                return pathname.isFile() && pathname.getName().startsWith(ConstantSign.STARTWITH_TINY_FLAG);
            }
        });

        //=============================================================================================================================================================
    }


    /**
     * 删除所有的前缀的图片内容，删除所有图片。
     */
    public static void methodDeleteImageFileInTinyAndEndWithjpg() {

        //使用子线程做
        ThreadUtils.executeBySingle(new ThreadUtils.SimpleTask<Void>() {

            @Override
            public Void doInBackground() throws Throwable {

                //压缩图片tiny文件夹下的所有文件，
                FileUtils.deleteFilesInDirWithFilter(PathUtils.getExternalAppDataPath() + File.separator + "tiny", new FileFilter() {

                    @Override
                    public boolean accept(File pathname) {
//                        LogUtils.d("itchen---所有被压缩--->pathname-->" + pathname.getAbsolutePath());
                        //itchen---所有被压缩--->pathname-->/storage/emulated/0/Android/data/com.dgj.propertysmart/tiny/tiny-304-2023-01-10-17-03-54.jpg
                        //itchen---所有被压缩--->pathname-->/storage/emulated/0/Android/data/com.dgj.propertysmart/tiny/tiny-499-2023-01-10-17-11-14.jpg
                        //itchen---所有被压缩--->pathname-->/storage/emulated/0/Android/data/com.dgj.propertysmart/tiny/tiny-351-2023-01-10-17-03-54.jpg
                        return pathname.isFile() && pathname.getName().startsWith(ConstantSign.STARTWITH_TINY_FLAG);
                    }

                });

                //携带项目内所有前缀的图片信息
                FileUtils.deleteFilesInDirWithFilter(PathUtils.getExternalAppFilesPath(), new FileFilter() {

                    @Override
                    public boolean accept(File pathname) {

                        //LogUtils.d("itchen---Android/data/com.dgj.propertysmart/files/文件夹下--->pathname-->" + pathname.getAbsolutePath());
                        //return pathname.isFile() && pathname.getName().startsWith(ConstantApi.STARTWITH_INSPECTTASK_FLAG);
                        //只要是图片类的都删除掉
                        return pathname.isFile() && pathname.getName().endsWith(".jpg");
                    }

                });


                return null;
            }

            @Override
            public void onSuccess(Void result) {

//                LogUtils.d("itchen---->清空该【管家物业】应用内 涉及到的所有图片信息 .jpg");

            }

        });


    }

    /**
     * 删除因为相机产生的图片或者tiny产生的图片
     */
    public static void methodDeleteImageFileInImagesCameraGeneratedOrTinySet(LinkedHashSet<String> _imagesCameraGeneratedOrTinySet, String _imagePrefix) {

        Iterator<String> iteratorImagesCameraGeneratedOrTinySet = _imagesCameraGeneratedOrTinySet.iterator();

        if (iteratorImagesCameraGeneratedOrTinySet != null) {

            while (iteratorImagesCameraGeneratedOrTinySet.hasNext()) {

                //拆开的写法:这里是当前图片的 全路径。
                String currentImagePath = iteratorImagesCameraGeneratedOrTinySet.next();
                //LogUtils.d("itchen-----methodDeleteImageFileInImagesCameraGeneratedOrTinySet---当前图片路径--->" + currentImagePath);
                //itchen-----methodDeleteImageFileInImagesCameraGeneratedOrTinySet---当前图片路径
                //        --->/storage/emulated/0/Android/data/com.dgj.propertysmart/files/inspecttask2021_08_26_14_51_20_887.jpg

                if (!TextUtils.isEmpty(currentImagePath)) {

                    //拆解掉 最后一段 文件名，然后 比对前缀。
                    String fileNameSure = currentImagePath.substring(currentImagePath.lastIndexOf("/") + 1);

                    //LogUtils.d("itchen---methodDeleteImageFileInImagesCameraGeneratedOrTinySet---打印正常的文件的全名---->" + fileNameSure);
                    //itchen---methodDeleteImageFileInImagesCameraGeneratedOrTinySet---打印正常的文件的全名---->inspecttask2021_08_26_14_51_20_887.jpg

                    if (!TextUtils.isEmpty(fileNameSure)) {
                        //如果文件的真名不是空的。

                        if (fileNameSure.startsWith(_imagePrefix)) {

                            //因为删除的是本地的文件，并不是该集合里的东西。
                            if (FileUtils.isFileExists(currentImagePath) && FileUtils.isFile(currentImagePath)) {
                                FileUtils.delete(currentImagePath);
                            }

                        }

                    }

                }

            }

        }


    }

    /**
     * 仅仅删除该界面之中涉及到的暂时无效的图片
     */
    /*public static void methodDeleteImageFileInImagesCameraGeneratedOrTinySet(LinkedHashSet<String> _imagesCameraGeneratedOrTinySet, String _imagePrefix, Session _session) {

        Iterator<String> iteratorImagesCameraGeneratedOrTinySet = _imagesCameraGeneratedOrTinySet.iterator();

        if (iteratorImagesCameraGeneratedOrTinySet != null) {

            while (iteratorImagesCameraGeneratedOrTinySet.hasNext()) {

                //拆开的写法
                String currentImagePath = iteratorImagesCameraGeneratedOrTinySet.next();

                if (!TextUtils.isEmpty(currentImagePath)) {

                    //拆解掉 最后一段 文件名，然后 比对前缀。
                    //String fileNameSure = currentImagePath.substring(currentImagePath.lastIndexOf("/") + 1);

                    //加强一次判断操作。
                    //if (fileNameSure.startsWith(_imagePrefix)) {

                    LogUtils.d("itchen----->即将删除的--iteratorImagesCameraGeneratedOrTinySet.next()==>" + currentImagePath);

                    //single-pool-2-thread-0, com.dgj.propertysmart.utils.CommUtils.methodDeleteImageFileInImagesCameraGeneratedOrTinySet(CommUtils.java:3834)
                    //itchen----->即将删除的--iteratorImagesCameraGeneratedOrTinySet.next()==>/storage/emulated/0/Android/data/com.dgj.propertysmart/files/inspecttask2020_12_14_15_47_16_152.jpg

                    //从该程序之中所有的 mSession之中保存的 图片路径之中删除掉这个值
                    //这个好像要实现 一边循环 一遍删除，需要找个新的替代
                    LinkedHashSet<String> tempListedHashSet = _session.getImagesLinkedHashSet();

                    if (tempListedHashSet != null && (!tempListedHashSet.isEmpty())) {

                        for (String itemStringImagePath ://
                                _session.getImagesLinkedHashSet()) {

                            if (TextUtils.equals(currentImagePath, itemStringImagePath)) {

                                //这里需要操作真实的数据 才可以
                                _session.getImagesLinkedHashSet().remove(itemStringImagePath);

                                break;
                            }

                        }
                    }

                    if (FileUtils.isFileExists(currentImagePath) && FileUtils.isFile(currentImagePath)) {
                        FileUtils.delete(currentImagePath);
                    }

                    //-----------------------------------------------------------------------------------------------------
                    //测试代码
                    //移除数据之后，那么 session之中存储的 路径为
                    for (String itemString ://
                            _session.getImagesLinkedHashSet()) {
                        LogUtils.d("itchen--移除数据之后，那么 session之中 剩下的路径为---->" + itemString);
                    }
                    //-----------------------------------------------------------------------------------------------------

                }

            }

        }

    }*/


}
